﻿#pragma once

#include <learn/ais/ais_object.h>

namespace xi
{

namespace ais
{

class EXT_SYMBOL AIS_Vector : public AIS_Object
{
  public:
    AIS_Vector(AIS_Vector &&) = delete;

    /**
     * @brief 指针构造
     *
     * @param[in] origin
     * @param[in] vector
     */
    AIS_Vector(std::shared_ptr<Vec3> origin, std::shared_ptr<Vec3> vector);

    /**
     * @brief 获得矢量
     *
     * @return std::shared_ptr<Vec3>
     */
    std::shared_ptr<Vec3> vector() const;

    /**
     * @brief 获得原点
     *
     * @return Vec3
     */
    std::shared_ptr<Vec3> origin() const;

    /**
     * @brief 初始化消息
     *
     * @param[in] msg
     */
    void visit(AIS_InitMsg *msg) override;

    /**
     * @brief 移动消息
     *
     * @param[in] msg
     */
    void visit(AIS_MoveMsg *msg) override;

  protected:
    std::shared_ptr<Vec3> m_origin;
    std::shared_ptr<Vec3> m_vector;
};

} // namespace ais

} // namespace xi
